package com.nl.controller.web.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.nl.controller.common.interceptor.SysContext;
import com.nl.controller.sms5g.mapper.Sms5gSignatureMapper;
import com.nl.controller.web.bean.SmsContent;
import com.nl.controller.web.bean.SmsUsers;
import com.nl.controller.web.bean.po.mgrgrouppo.SmsMgrGroupInfo;
import com.nl.controller.web.mapper.SmsContentMapper;
import com.nl.controller.web.mapper.SmsMgrGroupMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.nl.controller.common.annotation.SystemServiceLog;
import com.nl.controller.common.exception.SmsException;
import com.nl.controller.common.mapper.CommonMapper;
import com.nl.controller.common.service.CommonService;
import com.nl.controller.web.bean.SmsTemplateAttr;
import com.nl.controller.web.global.GlobalConst;
import com.nl.controller.web.mapper.SmsTemplateAttrMapper;
import com.nl.controller.web.mapper.UtilMapper;
import com.nl.controller.web.mapper.impl.TestMapperImpl;
import com.nl.controller.web.redis.RedisCluster;

import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;

import javax.servlet.http.HttpSession;

@Slf4j
@Service
public class SmsTemplateAttrService {
    @Autowired
    private SmsTemplateAttrMapper smsTemplateAttrMapper;

    @Autowired
    private CommonService commonService;
    
    @Autowired
    private UtilMapper utilMapper;

    @Autowired
	private CommonMapper commonMapper;

    @Autowired
    private Sms5gSignatureMapper sms5gSignatureMapper;

    @Autowired
    private SmsMgrGroupMapper smsMgrGroupMapper;

    @Autowired
    private SmsContentMapper smsContentMapper;
    
    @Autowired
    private  TestMapperImpl testMapperImpl;
    @SystemServiceLog(description = "查询模板信息表", value = false)
    public PageInfo<SmsTemplateAttr> findTempalteAttr(int page, int limit, String cityId, String mgrId, String mgrName, String state, String flag ) {
    	
    	Map<String, Object> map = new HashMap<>();
        map.put("cityId", cityId);
        map.put("mgrId", mgrId);
        map.put("mgrName", mgrName);
        map.put("state", state);

        List<SmsTemplateAttr> list;
        if (flag == null) {
            try {
                PageHelper.startPage(page, limit);
                list = smsTemplateAttrMapper.findTemplateAttr(map);
            } catch (Exception e) {
                e.printStackTrace();
                log.error("查询模板信息表");
                throw new SmsException("查询模板配置信息表出现异常");
            }
        } else {
            map.put("flag", 1);
            try {
                list = smsTemplateAttrMapper.findTemplateAttr(map);
            } catch (Exception e) {
                e.printStackTrace();
                log.error("查询模板信息表");
                throw new SmsException("查询模板审核信息表");
            }
        }
        PageInfo<SmsTemplateAttr> pageInfo = new PageInfo<SmsTemplateAttr>(list);
        return pageInfo;
    }

    @SystemServiceLog(description = "短信项目模板配置", value = false)
    public int configureTemplate(String mgrId, String mgrType,String sendType,String startTime, String endTime, String thresholdStartTime, String thresholdEndTime, String everyDayStartTime, String everyDayEndTime, String realTime, String isLocal, String localIsCz,String nonLocalIsCz,String cycle, int cycleThreshold, String isThreshold, int threshold, String flag,String state,String localDate,String nonlocalDate,String isProvince,String reset,String operatorPhone,String operatorId,String groupId) {
        int result = 0;
        SmsTemplateAttr smsTemplateAttr = new SmsTemplateAttr();
        try {
            smsTemplateAttr = smsTemplateAttrMapper.findTemplateAttrByMgrId(mgrId);
            log.info("短信项目模板配置获取项目信息：" + mgrId);
        } catch (Exception e) {
            e.printStackTrace();
            log.error("短信项目模板配置获取项目信息异常：" + mgrId);
        }
        smsTemplateAttr.setState(state);
        smsTemplateAttr.setId(mgrId);
        smsTemplateAttr.setMgrType(mgrType);
        smsTemplateAttr.setSendType(sendType);
        smsTemplateAttr.setStartDate(startTime);
        smsTemplateAttr.setEndDate(endTime);
        smsTemplateAttr.setEveryDayStartTime(everyDayStartTime);
        smsTemplateAttr.setEveryDayEndTime(everyDayEndTime);
        smsTemplateAttr.setIsLocal(isLocal);
        smsTemplateAttr.setLocalIsCz(localIsCz);
        smsTemplateAttr.setNonLocalIsCz(nonLocalIsCz);
        
        //smsTemplateAttr.setIsCz(isCz);
        smsTemplateAttr.setIsThreshold(isThreshold);
        smsTemplateAttr.setThreshold(threshold);
        smsTemplateAttr.setCycleThreshold(cycleThreshold);
        smsTemplateAttr.setThresholdStartTime(thresholdStartTime);
        smsTemplateAttr.setThresholdEndTime(thresholdEndTime);
        smsTemplateAttr.setRealTime(realTime);
        smsTemplateAttr.setLocalDate(localDate);
        smsTemplateAttr.setNonlocalDate(nonlocalDate);
        smsTemplateAttr.setIsProvince(isProvince);
        log.info(smsTemplateAttr.toString());
        //是否设置阀值, 0 不设置  1设置发送总量 2 发送周期 3 全设置
            smsTemplateAttr.setCycle(cycle);
        if ("insert".equals(flag)) {
            try {
                result = smsTemplateAttrMapper.insertTemplate(smsTemplateAttr);
                //新建项目入redis表
                RedisCluster redisCluster=new RedisCluster(GlobalConst.REDIS_CONFIG);
                Map<String, String> mgrs=redisCluster.hgetAll("mgrs");
                if(mgrs!=null){
                	if(!mgrs.containsKey(mgrId)){
                		mgrs.put(mgrId,"1");
                		redisCluster.hmset("mgrs", mgrs);
                		//String keyName=mgrId+"hy";
                		redisCluster.set(mgrId+"timeCount","0");
            			redisCluster.set(mgrId+"dayCount","0");
            			redisCluster.set(mgrId+"weekCount","0");
            			redisCluster.set(mgrId+"monthCount","0");
            			redisCluster.set(mgrId+"quarterCount","0");
            			redisCluster.set(mgrId+"yearCount","0");
            			redisCluster.set(mgrId+"totalCount","0");
            			log.info("项目id"+mgrId+"新增redis中的阀值成功！");
                	}
                }

                //5g模板添加短信内容，不添加过滤报错
                if("2".equals(sendType)){
                    HttpSession session = SysContext.getRequest().getSession();
                    SmsUsers user = (SmsUsers) session.getAttribute("user");
                    SmsContent smsContent = new SmsContent();
                    smsContent.setCityId("14");
                    smsContent.setId(mgrId);
                    smsContent.setContent("5g消息");
                    smsContent.setMsisdn(user.getMsisdn());
                    smsContentMapper.addContent(smsContent);
                    smsContentMapper.resetModifyTime(mgrId,"1");
                }
                
                if(null != redisCluster){
    				redisCluster.close();
   			 }    			
                commonService.createSmsOperLog("2", mgrId,"添加模板属性,项目编码："+mgrId, "0", "2");
            } catch (Exception e) {
                e.printStackTrace();
                commonService.createSmsOperLog("2", mgrId,"添加模板属性,项目编码"+mgrId, "1", "2");
                log.error("配置模板属性项目id： " + mgrId);
                throw new SmsException("配置模板属性项目id： " + mgrId);
            }
        } else if ("modify".equals(flag)) {
            try {
                smsMgrGroupMapper.deleteMgrGroupRel(mgrId);
            	String seqId = commonMapper.getLogSeqId();
            	SmsTemplateAttr smsTemplateAttrHis = new SmsTemplateAttr();
            	RedisCluster redisCluster=new RedisCluster(GlobalConst.REDIS_CONFIG);
                //获取项目模板修改前数据
               smsTemplateAttrHis = smsTemplateAttrMapper.findTemplateAttrByMgrId(mgrId);
               String totalCount = redisCluster.get(smsTemplateAttrHis.getId()+"totalCount");
           	   String yearCount = redisCluster.get(smsTemplateAttrHis.getId()+"yearCount");
           	   String quarterCount = redisCluster.get(smsTemplateAttrHis.getId()+"quarterCount");
           	   String monthCount = redisCluster.get(smsTemplateAttrHis.getId()+"monthCount");
           	   String weekCount = redisCluster.get(smsTemplateAttrHis.getId()+"weekCount");
           	   String dayCount = redisCluster.get(smsTemplateAttrHis.getId()+"dayCount");
                System.out.println("------"+smsTemplateAttr.getState());
               result = smsTemplateAttrMapper.modifyTemplate(smsTemplateAttr);
               //插入项目模板历史表
               result = smsTemplateAttrMapper.insertTemplateHis(smsTemplateAttrHis, seqId,reset,operatorPhone,totalCount,yearCount,quarterCount,monthCount,weekCount,dayCount);
               commonService.createSmsUpdateOperLog("3",mgrId, "修改模板属性,项目编码："+mgrId, "0", "2",seqId);
            } catch (Exception e) {
                e.printStackTrace();
                commonService.createSmsOperLog("3", mgrId,"修改模板属性,项目编码："+mgrId, "1", "2");
                log.error("配置模板属性项目id： " + mgrId);
                throw new SmsException("配置模板属性项目id： " + mgrId);
            }
        }

        if(org.apache.commons.lang3.StringUtils.isNotBlank(groupId)){
            smsMgrGroupMapper.addMgrGroupRel(groupId,mgrId,operatorId);
        }
        return result;
    }

    @SystemServiceLog(description = "短信项目模板查询", value = false)
    public SmsTemplateAttr findTemplateAttrByMgrId(String mgrId) {
        SmsTemplateAttr smsTemplateAttr;
        try {
            smsTemplateAttr = smsTemplateAttrMapper.findTemplateAttrByMgrId(mgrId);
            smsTemplateAttr.setSmsRealtimeControl(smsTemplateAttrMapper.findBySmsRealtimeControlMgrId(mgrId));
            String sendType = smsTemplateAttr.getSendType();
            //若为5g多媒体模板则替换通道号为签名通道号
            if("2".equals(sendType)){
                String smsChannelNumber = sms5gSignatureMapper.qryChannelNumberByMgrId(smsTemplateAttr.getId());
                if(StringUtils.isEmpty(smsChannelNumber)){
                    smsTemplateAttr.setSmsChannelNumber("暂未选择签名");
                }else{
                    smsTemplateAttr.setSmsChannelNumber(smsChannelNumber);
                }
            }
            String localDate = smsTemplateAttr.getLocalDate();
            if (null==localDate || "".equals(localDate)) {
            	localDate = "0";
			}
            smsTemplateAttr.setLocalDate(localDate);
            if(null!=smsTemplateAttr.getCityId()&&!"".equals(smsTemplateAttr.getCityId())&&!"25".equals(smsTemplateAttr.getCityId())){
            	smsTemplateAttr.setCityName(smsTemplateAttr.getCityName()+"市");
            }
            if(null==smsTemplateAttr.getCountyId()||"".equals(smsTemplateAttr.getCountyId())){
            	smsTemplateAttr.setBelong(smsTemplateAttr.getCityName2());
            }else{
            	smsTemplateAttr.setCountyName(utilMapper.getCountyName(smsTemplateAttr.getCountyId()));
            	smsTemplateAttr.setBelong(smsTemplateAttr.getCityName2()+"/"+smsTemplateAttr.getCountyName());
            }
            String groupId = smsMgrGroupMapper.findMgrGroupByMgrId(mgrId);
            if(org.apache.commons.lang3.StringUtils.isNotBlank(groupId)){
                smsTemplateAttr.setGroupId(groupId);
                SmsMgrGroupInfo smsMgrGroupInfo = smsMgrGroupMapper.qryGroupInfoById(groupId);
                String groupName = smsMgrGroupInfo.getGroupName();
                if(org.apache.commons.lang3.StringUtils.isNotBlank(groupName)){
                    smsTemplateAttr.setGroupName(groupName);
                }else{
                    smsTemplateAttr.setGroupName("暂未关联分组");
                }
            }else{
                smsTemplateAttr.setGroupName("暂未关联分组");
            }


        } catch (Exception e) {
            e.printStackTrace();
            log.error("查询模板属性项目id： " + mgrId);
            throw new SmsException("查询模板属性项目id： " + mgrId);
        }
        return smsTemplateAttr;
    }

    /**
     * 重置模板信息
     * @param map
     * @return
     */
    public  int resetThreshold(HashMap map){
        int result=0;
        try {
            result=smsTemplateAttrMapper.resetThreshold(map);
        } catch (Exception e) {
            e.printStackTrace();
            log.error("重置模板信息" );
        }
        return  result;
    }
    
    
    @SystemServiceLog(description = "查询项目模板信息表", value = false)
    public PageInfo<SmsTemplateAttr> findTempalteAttr(int page, int limit, String cityId, String mgrId, String mgrName, String state, String flag,String mgrState,String ckeckState,String openAccount,String countyId,String isArrearage,String sendType) {
    	/*int insertCount = testMapperImpl.addBossSmSendTemp();
        log.info("------插入boss表"+insertCount+"个");*/
    	Map<String, Object> map = new HashMap<>();
        map.put("cityId", cityId);
        map.put("mgrId", mgrId);
        map.put("mgrName", mgrName);
        map.put("state", state);
        map.put("mgrState", mgrState);
        map.put("ckeckState", ckeckState);
        map.put("countyId", countyId);
        map.put("openAccount", openAccount);
        map.put("isArrearage", isArrearage);
        map.put("sendType",sendType);
        List<SmsTemplateAttr> list;
        PageHelper.startPage(page, limit);
        String openAccount1;
        String mgrType;
        if (flag == null) {
            try {
                list = smsTemplateAttrMapper.findTemplateAttr(map);
                for (SmsTemplateAttr smsTemplateAttr : list) {
                    String sendType2 = smsTemplateAttr.getSendType();
                	openAccount1 = this.findOpenAccount(smsTemplateAttr.getId(),sendType2);
                	smsTemplateAttr.setOpenAccount(openAccount1);
                    if(null==smsTemplateAttr.getCityId()||"".equals(smsTemplateAttr.getCityId())||"25".equals(smsTemplateAttr.getCityId())){
                    	smsTemplateAttr.setCityName("-");
                    }else{
                    	smsTemplateAttr.setCityName(smsTemplateAttr.getCityName()+"市");
                    }
                    if(null==smsTemplateAttr.getCountyId()||"".equals(smsTemplateAttr.getCountyId())){
                    	smsTemplateAttr.setBelong(smsTemplateAttr.getCityName2());
                    }else{
                    	smsTemplateAttr.setCountyName(utilMapper.getCountyName(smsTemplateAttr.getCountyId()));
                    	smsTemplateAttr.setBelong(smsTemplateAttr.getCityName2()+"/"+smsTemplateAttr.getCountyName());
                    }

                    smsTemplateAttr.setStationNum(utilMapper.getStationNumById(smsTemplateAttr.getId()));


                    //若为5g多媒体模板则替换通道号为签名通道号
                    if("2".equals(sendType2)){

                        String smsChannelNumber = sms5gSignatureMapper.qryChannelNumberByMgrId(smsTemplateAttr.getId());
                        if(StringUtils.isEmpty(smsChannelNumber)){
                            smsTemplateAttr.setSmsChannelNumber("暂未选择签名");
                        }else{
                            smsTemplateAttr.setSmsChannelNumber(smsChannelNumber);
                        }

                    }


                }
            } catch (Exception e) {
                e.printStackTrace();
                log.error("查询模板信息表");
                throw new SmsException("查询项目模板信息表出现异常");
            }
        } else {
            map.put("flag", 1);
            try {
                list = smsTemplateAttrMapper.findTemplateAttr(map);
                for (SmsTemplateAttr smsTemplateAttr : list) {
                	openAccount = this.findOpenAccount(smsTemplateAttr.getId(),sendType);
                	smsTemplateAttr.setOpenAccount(openAccount);
                }
            } catch (Exception e) {
                e.printStackTrace();
                log.error("查询模板信息表");
                throw new SmsException("查询模板审核信息表");
            }
        }
        PageInfo<SmsTemplateAttr> pageInfo = new PageInfo<SmsTemplateAttr>(list);
        return pageInfo;
    }
    @SystemServiceLog(description = "查询项目模板历史表", value = false)
    public SmsTemplateAttr findTemplateAttrHis(String seqId){
    	SmsTemplateAttr smsTemplateAttr = new SmsTemplateAttr();
    	try {
    		smsTemplateAttr = smsTemplateAttrMapper.findTemplateAttrHis(seqId);
    		String isLocalHis = smsTemplateAttr.getIsLocal();
            if ("0".equals(isLocalHis)) {
            	smsTemplateAttr.setIsLocal("本地");
            }else if ("1".equals(isLocalHis)) {
            	smsTemplateAttr.setIsLocal("外地");
            }else if ("2".equals(isLocalHis)) {
            	smsTemplateAttr.setIsLocal("本地+外地");
            }
            String cycleHis = smsTemplateAttr.getCycle();
            if ("1".equals(cycleHis)) {
            	smsTemplateAttr.setCycle("按年");
            }else if ("2".equals(cycleHis)) {
            	smsTemplateAttr.setCycle("按月");
            }else if ("3".equals(cycleHis)) {
            	smsTemplateAttr.setCycle("按周");
            }else if ("4".equals(cycleHis)) {
            	smsTemplateAttr.setCycle("按日");
            }else if ("5".equals(cycleHis)) {
            	smsTemplateAttr.setCycle("按时间段");
            }
            String isThresholdHis = smsTemplateAttr.getIsThreshold();
            if ("0".equals(isThresholdHis)) {
            	smsTemplateAttr.setIsThreshold("不设置");
            }else if ("1".equals(isThresholdHis)) {
            	smsTemplateAttr.setIsThreshold("设置发送总量");
            }else if ("2".equals(isThresholdHis)) {
            	smsTemplateAttr.setIsThreshold("设置发送周期");
            }else if ("3".equals(isThresholdHis)) {
            	smsTemplateAttr.setIsThreshold("全设置");
            }
            String isProvinceHis = smsTemplateAttr.getIsProvince();
            if ("0".equals(isProvinceHis)) {
            	smsTemplateAttr.setIsProvince("省内");
            }else if ("1".equals(isProvinceHis)) {
            	smsTemplateAttr.setIsProvince("全部");
            }
            String realTimeHis = smsTemplateAttr.getRealTime();
            if ("0".equals(realTimeHis)) {
            	smsTemplateAttr.setRealTime("立即发送");
            }else if ("5".equals(realTimeHis)) {
            	smsTemplateAttr.setRealTime("延迟5分钟发送");
            }else if ("10".equals(realTimeHis)) {
            	smsTemplateAttr.setRealTime("延迟10分钟发送");
            }else if ("20".equals(realTimeHis)) {
            	smsTemplateAttr.setRealTime("延迟20分钟发送");
            }
            smsTemplateAttr.setLocalDate(smsTemplateAttr.getLocalDate()+"天");
		} catch (Exception e) {
			e.printStackTrace();
            log.error("历史项目模板查询");
            throw new SmsException("历史项目模板查询异常："+seqId);
		}
		return smsTemplateAttr;
    }
    /**
     * desc:非系统管理员修改项目入待发表
     * @author syl
     * @Date 2019年10月29日 下午7:36:24
     * @param map
     */
    public int insertSend(Map<String, Object> map){
    	int result=0;
    	try {
    		result = smsTemplateAttrMapper.insertSend(map);
		} catch (Exception e) {
			e.printStackTrace();
		}
    	return result;
    }
    /**
     * desc:查询是否开户
     * @param mgrId
     */
    public String findOpenAccount(String mgrId,String sendType){
    	String isOpenAccount = "";
    	String openAccount = "";
    	try {
    	    if("1".equals(sendType)){
                isOpenAccount = smsTemplateAttrMapper.findOpenAccount(mgrId);
                if("-1".equals(isOpenAccount)){
                    openAccount = "未开户";
                }else if("1".equals(isOpenAccount)){
                    openAccount = "已开户";
                }else if("0".equals(isOpenAccount)){
                    openAccount = "已销户";
                }else{
                    openAccount = "未设定";
                }
            }else if("2".equals(sendType)){
                isOpenAccount = sms5gSignatureMapper.findOpenAccountByMgrId(mgrId);
                if("0".equals(isOpenAccount)){
                    openAccount = "未开户";
                }else if("1".equals(isOpenAccount)){
                    openAccount = "已开户";
                }else {
                    openAccount = "未开户";
                }
            }


		} catch (Exception e) {
			e.printStackTrace();
		}
    	return openAccount;
    }
}